package com.itwk.gulimall.product.controller;

import com.itwk.common.utils.PageUtils;
import com.itwk.common.utils.R;
import com.itwk.gulimall.product.entity.PmsProductAttrValueEntity;
import com.itwk.gulimall.product.service.PmsAttrService;
import com.itwk.gulimall.product.vo.AttrResponse;
import com.itwk.gulimall.product.vo.AttrVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.List;
import java.util.Map;


/**
 * 商品属性
 *
 * @author wangke
 * @email wangke19970512@163.com
 * @date 2021-01-07 23:03:03
 */
@RestController
@RequestMapping("product/attr")
@Transactional
public class PmsAttrController {
    @Autowired
    private PmsAttrService pmsAttrService;
    //压力测试接口
    @GetMapping("/index")
    public R test(){
        return R.ok();
    }

    /**
     * 列表
     * 此接口基本属性与销售属性共用，区别在于销售属性不需要关联分组信息，请求时请求地址不同，使用mvc接收tpye类型进行判断
     * 基本属性：/product/attr/base/list/{catelogId}
     * 销售属性：/product/attr/sale/list/{catelogId}
     *
     */
    @RequestMapping("/{attrType}/list/{catelogId}")
  //  @RequiresPermissions("product:pmsattr:list")//获取属性详情列表
    public R list(@RequestParam Map<String, Object> params,@PathVariable("catelogId") Long catelogId,@PathVariable(name = "attrType") String attrType){
        PageUtils page = pmsAttrService.attrRelationList(params,catelogId,attrType);
        return R.ok().put("page", page);
    }

    /*
    * product/attr/base/listforspu/13 spu修改规格参数的回显，实际操作是.PmsProductAttrValue这个表
    * 修改spu的基本属性，此处我觉得写在com.itwk.gulimall.product.controller.PmsProductAttrValueController这里更合适
    *
    * */
    @GetMapping("/base/listforspu/{spuId}")
     public R getSpuBaseAttr(@PathVariable Long spuId){
        List<PmsProductAttrValueEntity> spuBaseAttr = pmsAttrService.getSpuBaseAttr(spuId);
        return R.ok().put("data",spuBaseAttr);
     }
     /*
     * 回显后提交修改
     * */
     @PostMapping("/update/{spuId}")
     public R updateSpuBaseAttr(@RequestBody List<PmsProductAttrValueEntity> productAttrValueEntities,@PathVariable Long spuId){
         pmsAttrService.updateSpuBaseAttr(productAttrValueEntities,spuId);

         return R.ok();
     }

    /**
     * 信息
     */
    @RequestMapping("/info/{attrId}")
  //  @RequiresPermissions("product:pmsattr:info")
    public R info(@PathVariable("attrId") Long attrId){
        //修改回显数据，显示分组信息和分类完整路径
	 AttrResponse attrResponse = pmsAttrService.getAttrResponse(attrId);

        return R.ok().put("attr", attrResponse);
    }

    /**
     * 保存
     */
    @RequestMapping("/save")
  //  @RequiresPermissions("product:pmsattr:save")
    public R save(@RequestBody AttrVo attrVo){ //接收新增属性时用vo接收，用于封装分组id,同时进行中间表的关联
		pmsAttrService.saveAttrRelation(attrVo);

        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
  //  @RequiresPermissions("product:pmsattr:update")
    public R update(@RequestBody AttrVo attrVo){
        //需要同步修改关联关系
		pmsAttrService.updateAttrRelation(attrVo);
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
   // @RequiresPermissions("product:pmsattr:delete")
    public R delete(@RequestBody Long[] attrIds){
		pmsAttrService.removeByIds(Arrays.asList(attrIds));

        return R.ok();
    }

}
